﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SoftHotel.Models;
using System.Data.Entity;

namespace SoftHotel.Controllers
{
    public class ProveedorController : Controller
    {
        public ParametroDAO parametroDAO = new ParametroDAO();
        public ProveedorDAO proveedorDAO = new ProveedorDAO();

        public ActionResult Index()
        {
            ViewBag.estado = new SelectList(parametroDAO.parametros.Where(a => a.tipo == "ESTADO_PRODUCTO"), "idParametro", "valor");
            return View();
        }

        [HttpPost]
        public ActionResult Index(Proveedor proveedor, string button)
        {
            if (button == "Agregar")
            {
                return RedirectToAction("Agregar");
            }


            if (button == "Buscar")
            {
                return RedirectToAction("Search",proveedor);
            }

            return RedirectToAction("Index");

        }


        public ActionResult Agregar()
        {
            ViewBag.estado = new SelectList(parametroDAO.parametros.Where(a => a.tipo == "ESTADO_PRODUCTO"), "idParametro", "valor");
            return View();
        }

        [HttpPost]
        public ActionResult Agregar(Proveedor proveedor, string button)
        {
            if (button == "Aceptar")
            {
                proveedor.fechaRegistro = DateTime.Now;
                if (ModelState.IsValid)
                {
                    proveedorDAO.proveedor.Add(proveedor);
                    proveedorDAO.SaveChanges();
                    return RedirectToAction("Index");
                }
            }


            if (button == "Regresar")
            {
                return RedirectToAction("Index");
            }

            return View();

        }

        public ActionResult Search(Proveedor proveedor)
        {

            var proveedores = proveedorDAO.proveedor.Where(a => a.idProveedor > 0); //me manda todas las reservas activas
            proveedores = proveedores.Include(a => a.objEstado);

            /*if (proveedor.razonSocial != null)
            {
                proveedores = proveedores.Where(a => a.razonSocial == proveedor.razonSocial);
            }
            if (proveedor.ruc != null)
            {
                proveedores = proveedores.Where(a => a.ruc == proveedor.ruc);
            }
            if (proveedor.representante != null)
            {
                proveedores = proveedores.Where(a => a.representante == proveedor.representante);
            }
            if (proveedor.telefono != null)
            {
                proveedores = proveedores.Where(a => a.telefono == proveedor.telefono);
            }
            if (proveedor.estado != 0)
            {
                proveedores = proveedores.Where(a => a.estado == proveedor.estado);
            }*/

            return View(proveedores);
        }

        [HttpPost]
        public ActionResult Search(string button)
        {
            if (button == "Regresar")
            {
                return RedirectToAction("Index");
            }

            return View();
        }

        public ActionResult Detalle(int idProveedor)
        {
            var proveedores = proveedorDAO.proveedor.Where(a => a.idProveedor == idProveedor);
            proveedores = proveedores.Include(a => a.objEstado);

            return View(proveedores);
        }

        [HttpPost]
        public ActionResult Detalle(Proveedor proveedor, string button)
        {
            if (button == "")
            {
                return RedirectToAction("Index");
            }

            return View();
        }
        /*//
        // GET: /Proveedor/
        static private  ProveedorDAO pDAO = new ProveedorDAO();
        static private Proveedor objetoDetalle = new Proveedor();
        static List<Proveedor> busqueda; //resultado de la busqueda
        static int id_prov;

        //---PACHOOOOOOON
        static ProductoModel producto;
        static List<ProductoModel> busquedax;
        static ProductoDAO listaprod = new ProductoDAO();
        static ProductoDAO listaprodbusqueda = new ProductoDAO();
        //--- PACHOOOOOOON

        //--Parte del vincular
        static private List<ProductoModel> listaProdAux = new List<ProductoModel>(); //falta inicializarlo siempre
        static private List<ProductoModel> listaProdFinal = new List<ProductoModel>();

        
        public ActionResult Index()
        {
            //pDAO.pbuscadis = new List<Proveedor>() { };

            return View();
        }

        [HttpPost]
        public ActionResult Index(Proveedor proveedor, string button)
        {
            if (button == "Agregar") {
                return RedirectToAction("Agregar", "Proveedor");
            }
        

            if (button == "Buscar") {
                //hacer la busqueda en var: busqueda
                busqueda = pDAO.buscarProveedores(proveedor);
                return RedirectToAction("Buscar");
            }
            
            return View();
           
        }
        
        public ActionResult Buscar()
        {
            ViewBag.ListaProveedores = busqueda;
            return View();
        }

        [HttpPost]
        public ActionResult Buscar(Proveedor proveedor, string button)
        {
            if (button == "Regresar")
                return RedirectToAction("Index");

            return View();
        }

        
 
        public ActionResult Detalle(string razon, string button)
        {
            objetoDetalle = pDAO.consultarDetalle(razon); //devuelve un Proveedor
            ViewBag.razonSocial = objetoDetalle.razon;
            ViewBag.ruc = objetoDetalle.ruc;
            ViewBag.dir = objetoDetalle.dir;
            ViewBag.mail = objetoDetalle.mail;
            ViewBag.fono = objetoDetalle.fono;
            ViewBag.fecha = objetoDetalle.fechaRegistro;
            ViewBag.representante = objetoDetalle.representante;
            ViewBag.dni = objetoDetalle.dni;
            ViewBag.cel = objetoDetalle.celular;
            ViewBag.estado = objetoDetalle.estado;


            return View();
        }

        //
        // POST: /Proveedor/Edit/5

        [HttpPost]
        public ActionResult Detalle(Proveedor proveedor, string button)
        {
            if (button == "Regresar")
                return RedirectToAction("Buscar");
            if (button == "Editar")
                return RedirectToAction("Editar");
            if (button == "Vincular Productos")
                return RedirectToAction("Vincular");
            if (button == "Consultar Productos Vinculados")
                return RedirectToAction("consultarProdVinc");

            return View();
         
        }

        public ActionResult Vincular()
        {
            //mostrar detalle
            ViewBag.razonSocial = objetoDetalle.razon;
            ViewBag.ruc = objetoDetalle.ruc;
            ViewBag.dir = objetoDetalle.dir;
            ViewBag.mail = objetoDetalle.mail;
            ViewBag.fono = objetoDetalle.fono;
            ViewBag.fecha = objetoDetalle.fechaRegistro;
            ViewBag.representante = objetoDetalle.representante;
            ViewBag.dni = objetoDetalle.dni;
            ViewBag.cel = objetoDetalle.celular;
            ViewBag.estado = objetoDetalle.estado;

            //para el agregar
            ViewBag.ListaProductos = listaProdFinal; 

            return View();
        }

        [HttpPost]
        public ActionResult Vincular(Proveedor proveedor, string button)
        {
            
            if (button == "Añadir")
                return RedirectToAction("BuscarProducto");
            if (button == "Guardar"){
                pDAO.vincularProductos(listaProdFinal, objetoDetalle.ruc);
                pDAO.vaciarListaProductos(listaProdFinal);
                return RedirectToAction("Index");
            }
            if (button == "Cancelar")
                pDAO.vaciarListaProductos(listaProdFinal);
            return View();

        }

        //**---- PACHOOOOOOOOOOOOOOOOOOON
        public ActionResult BuscarProducto()
        {
            return View();
        }

        [HttpPost]
        public ActionResult BuscarProducto(ProductoModel prod, string button)
        {

            if (button == "Buscar")
            {
                producto = prod;
                busquedax = listaprod.buscar(producto);
            }
            listaprodbusqueda.pbuscadis = busquedax;
            return RedirectToAction("ResultadoProductos");
        }

        public ActionResult ResultadoProductos(string idProducto)
        {
            //encontrar el objeto que tiene el idProducto
            foreach (ProductoModel prod in listaprodbusqueda.pbuscadis)
            {
                if (prod.idProducto == idProducto)
                {
                    pDAO.agregarProdListAux(listaProdAux, prod);
                    break;
                }

            }
            
            return View(listaprodbusqueda);
        }

        [HttpPost]
        public ActionResult ResultadoProductos(ProductoModel prod, string button)
        {
            if (button == "Aceptar")
            {
                //combinar listaProdFinal listaProdAux
                pDAO.mergeListas(listaProdAux, listaProdFinal);
                return RedirectToAction("Vincular");
            }

            if (button == "Regresar")
            {
                return RedirectToAction("BuscarProducto");
            }

            return View();  
        }
        //------PACHOOOOOOOOOOOOOOOOOOON



        public ActionResult Agregar()
        {

            ViewBag.ListaProveedores = pDAO.listaProveedores;
            ViewBag.Estados = pDAO.obtenerCombo("ESTADO_PROVEEDOR");
            return View();
        }

        [HttpPost]
        public ActionResult Agregar(Proveedor proveedor, string button)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    //debe ir afuera para que se refresque
                    ViewBag.Estados = pDAO.obtenerCombo("ESTADO_PROVEEDOR");
                    ViewBag.ListaProveedores = pDAO.listaProveedores;
                    if (button == "Añadir")
                    {
                        //esta agregado?
                        if (pDAO.verificarProveedorAgregado(proveedor))
                        {
                            string mensaje = "El proveedor ya ha sido agregado";
                            ViewBag.mensaje = mensaje;
                        }
                        else
                        {
                            pDAO.agregarProveedor(proveedor);
                        }
                    }
                    if (button == "Guardar")
                    {
                        pDAO.registrarProveedores();
                        pDAO.vaciarProveedores();
                        return RedirectToAction("Index");
                    }
                    
                    if (button == "Cancelar")
                        return RedirectToAction("Index");
                }
                else
                {
                    return View();
                }
            }
            catch(Exception e)
            {
            }
            return View();
        }

        public ActionResult Editar()
        {
            ViewBag.razonSocial = objetoDetalle.razon;
            ViewBag.ruc = objetoDetalle.ruc;
            ViewBag.dir = objetoDetalle.dir;
            ViewBag.mail = objetoDetalle.mail;
            ViewBag.fono = objetoDetalle.fono;
            ViewBag.fecha = objetoDetalle.fechaRegistro;
            ViewBag.representante = objetoDetalle.representante;
            ViewBag.dni = objetoDetalle.dni;
            ViewBag.cel = objetoDetalle.celular;
            ViewBag.estado = objetoDetalle.estado;

            //obtener id del proveedor para poder actualizarlo
            id_prov = pDAO.obtenerIDprov(objetoDetalle);

            return View();
        }

        [HttpPost]
        public ActionResult Editar(Proveedor proveedor, string button)
        {
            if (button == "Cancelar")
                return RedirectToAction("Detalle");
            if (button == "Aceptar")
            {
                //update
                pDAO.editar(id_prov, proveedor);
                return RedirectToAction("Index");
            }
            return View();
        }

        /*
        public ActionResult consultarProdVinc()
        {
            //data reader de los productos
            //alamacenar cada uno en una lista
            //asignar esa lista al ViewBag
            ViewBag.ListaProds = pDAO.productosVinculados(objetoDetalle);
            ViewBag.razonSocial = objetoDetalle.razon;
            ViewBag.ruc = objetoDetalle.ruc;
            ViewBag.dir = objetoDetalle.dir;
            ViewBag.mail = objetoDetalle.mail;
            ViewBag.fono = objetoDetalle.fono;
            ViewBag.fecha = objetoDetalle.fechaRegistro;
            ViewBag.representante = objetoDetalle.representante;
            ViewBag.dni = objetoDetalle.dni;
            ViewBag.cel = objetoDetalle.celular;
            ViewBag.estado = objetoDetalle.estado;

            return View();
        }

        [HttpPost]
        public ActionResult consultarProdVinc(Proveedor prov, string button)
        {
            
            return View();
        }*/
    }
}
